package dominioDAO;

import hbt.HibernateDAO;
import hbt.HibernateUtil;

import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.List;

import org.hibernate.Session;
import org.hibernate.SessionFactory;

import dominioEntity.Cliente;
import dominioTO.ClienteTO;


// Cliente lado Servidor DAO (Persistencia)

public class ClienteDao{
	private static ClienteDao instancia ;
	private static SessionFactory sf;
	private static Session session;
	
	public static ClienteDao getInstancia() {
		if(instancia == null){
			instancia = new ClienteDao();
		} 
		return instancia;
	}
	public ClienteDao()
	{
		sf = HibernateUtil.getSessionFactory();
	}
	
	protected Session getSession(){
		if(session == null || !session.isOpen()){
			session = sf.openSession();
		}
		return session;
	}
	
	protected void closeSession()
	{
		if(session.isOpen())
		{
			session.close();
		}
	}
	

	public void persistirCliente(List<ClienteTO> list) throws RemoteException
	{		
		List<Cliente> cli = new ArrayList<Cliente>();
		for(ClienteTO dto : list){
			Cliente aux = new Cliente ();
			aux.setCuit(dto.getCuit());
			aux.setRazonSocial(dto.getRazonSocial());
			aux.setFechaAlta(dto.getFechaAlta());
			aux.setDescuentos(dto.getDescuentos());
			aux.setRespInscripto(dto.isRespInscripto());
			aux.setIngBrutos(dto.getIngBrutos());
			aux.setCondPago(dto.getCondPago());
			aux.setEstado(dto.isEstado());
			cli.add(aux);
		}
		HibernateDAO.getInstancia().persistList(cli);			
	}
	
	
	public Cliente buscarCliente(String cuit)
	{
		Session s = this.getSession();
		String sentencia = "from Cliente c where c.cuit=?";		
		Cliente cli = (Cliente) s.createQuery(sentencia).
								setString(0, cuit).
								uniqueResult();
		this.closeSession();
		return cli;
	}
	public Cliente getCliente(ClienteTO cliTO)
	{
		Cliente cli = new Cliente();
		
		cli.setCuit(cliTO.getCuit());
		cli.setRazonSocial(cliTO.getRazonSocial());
		cli.setFechaAlta(cliTO.getFechaAlta());
		cli.setDescuentos(cliTO.getDescuentos());
		cli.setRespInscripto(cliTO.isRespInscripto());
		cli.setIngBrutos(cliTO.getIngBrutos());
		cli.setCondPago(cliTO.getCondPago());
		cli.setEstado(cliTO.isEstado());
		
		return cli;
	}
}
